// 班级管理页面
Page({
  // 页面的初始数据
  data: {
    classList: [], // 班级列表数据
    currentClass: null, // 当前选中的班级ID
    studentList: [], // 学生列表数据
    searchValue: '', // 搜索关键词
    showAddModal: false, // 是否显示添加学生模态框
    showEditModal: false, // 是否显示编辑学生模态框
    showAddClassModal: false, // 是否显示添加班级模态框
    // 学生表单数据
    formData: {
      name: '', // 学生姓名
      studentId: '', // 学生学号
      phone: '', // 联系电话
      dormitory: '' // 宿舍号
    },
    // 班级表单数据
    classFormData: {
      name: '', // 班级名称
      description: '' // 班级描述
    }
  },

  // 页面加载时执行
  onLoad() {
    this.loadClassList();
  },

  // 从数据库加载班级列表
  async loadClassList() {
    try {
      const db = wx.cloud.database();
      // 获取当前登录用户信息
      const userInfo = wx.getStorageSync('userInfo');
      
      // 未登录时提示并返回
      if (!userInfo) {
        wx.showToast({
          title: '请先登录',
          icon: 'none'
        });
        return;
      }
      
      let query = db.collection('classes');
      
      // 根据用户角色筛选班级数据
      // 如果是辅导员角色，只获取自己管理的班级
      if (userInfo.role === 'counselor') {
        if (userInfo.classes && Array.isArray(userInfo.classes) && userInfo.classes.length > 0) {
          // 使用数据库命令查询多个班级
          const _ = db.command;
          query = query.where({
            name: _.in(userInfo.classes)
          });
        } else if (userInfo.class) {
          // 兼容老数据结构，单个班级的情况
          query = query.where({
            name: userInfo.class
          });
        }
      }
      
      // 执行查询并获取结果
      const { data } = await query.get();
      this.setData({
        classList: data,
        // 自动选择第一个班级作为当前班级
        currentClass: data.length > 0 ? data[0]._id : null
      });
      
      // 如果有班级数据，自动加载第一个班级的学生列表
      if (data.length > 0) {
        this.loadStudentList(data[0]._id);
      }
    } catch (error) {
      // 错误处理和提示
      console.error('加载班级列表失败', error);
      wx.showToast({
        title: '加载班级列表失败',
        icon: 'none'
      });
    }
  },

  // 根据班级ID加载学生列表
  async loadStudentList(classId) {
    if (!classId) return;
    
    try {
      // 显示加载中提示
      wx.showLoading({
        title: '加载中',
      });
      
      // 查询指定班级的学生数据
      const db = wx.cloud.database();
      const { data } = await db.collection('users')
        .where({
          class: classId,
          role: 'student' // 只查询学生角色
        })
        .get();
      this.setData({
        studentList: data
      });
      
      wx.hideLoading();
    } catch (error) {
      // 错误处理和提示
      console.error('加载学生列表失败', error);
      wx.showToast({
        title: '加载学生列表失败',
        icon: 'none'
      });
      wx.hideLoading();
    }
  },

  // 切换当前选中的班级
  onClassSelect(e) {
    const classId = e.currentTarget.dataset.id;
    this.setData({
      currentClass: classId
    });
    // 加载选中班级的学生列表
    this.loadStudentList(classId);
  },

  // 搜索学生功能
  onSearch(e) {
    const searchValue = e.detail.value.trim();
    this.setData({ searchValue });
    
    // 搜索框为空时，重新加载全部学生
    if (searchValue === '') {
      this.loadStudentList(this.data.currentClass);
      return;
    }
    
    // 使用正则表达式进行本地搜索过滤
    const db = wx.cloud.database();
    db.collection('users')
      .where({
        class: this.data.currentClass,
        role: 'student',
        name: db.RegExp({
          regexp: searchValue, // 匹配搜索关键词
          options: 'i', // 不区分大小写
        })
      })
      .get()
      .then(res => {
        // 更新搜索结果
        this.setData({
          studentList: res.data
        });
      })
      .catch(err => {
        console.error('搜索失败', err);
      });
  },

  // 显示添加学生的模态框
  showAddStudentModal() {
    // 重置表单数据并显示模态框
    this.setData({
      showAddModal: true,
      formData: {
        name: '',
        studentId: '',
        phone: '',
        dormitory: ''
      }
    });
  },

  // 隐藏添加学生的模态框
  hideAddModal() {
    this.setData({
      showAddModal: false
    });
  },

  // 显示编辑学生的模态框
  showEditStudentModal(e) {
    const studentId = e.currentTarget.dataset.id;
    // 查找要编辑的学生数据
    const student = this.data.studentList.find(s => s._id === studentId);
    
    if (student) {
      // 填充表单数据并显示模态框
      this.setData({
        showEditModal: true,
        formData: {
          name: student.name || '',
          studentId: student.studentId || '',
          phone: student.phone || '',
          dormitory: student.dormitory || ''
        },
        currentEditStudent: studentId // 记录当前编辑的学生ID
      });
    }
  },

  // 隐藏编辑学生的模态框
  hideEditModal() {
    this.setData({
      showEditModal: false
    });
  },

  // 显示添加班级的模态框
  showAddClassModal() {
    // 重置表单数据并显示模态框
    this.setData({
      showAddClassModal: true,
      classFormData: {
        name: '',
        description: ''
      }
    });
  },

  // 隐藏添加班级的模态框
  hideAddClassModal() {
    this.setData({
      showAddClassModal: false
    });
  },

  // 添加新班级到数据库
  async addNewClass() {
    // 验证班级名称不能为空
    if (!this.data.classFormData.name.trim()) {
      wx.showToast({
        title: '请输入班级名称',
        icon: 'none'
      });
      return;
    }
    
    try {
      const db = wx.cloud.database();
      // 创建新班级记录
      const result = await db.collection('classes').add({
        data: {
          name: this.data.classFormData.name.trim(),
          description: this.data.classFormData.description,
          createTime: db.serverDate(), // 创建时间
          updateTime: db.serverDate() // 更新时间
        }
      });
      
      // 更新当前用户负责的班级列表
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo) {
        // 处理用户班级数据，兼容不同的数据结构
        let classes = [];
        if (userInfo.classes && Array.isArray(userInfo.classes)) {
          classes = [...userInfo.classes];
        } else if (userInfo.class) {
          classes = [userInfo.class];
        }
        
        // 将新班级添加到用户的班级列表中
        classes.push(this.data.classFormData.name.trim());
        
        // 更新用户信息到数据库
        await db.collection('users').doc(userInfo._id).update({
          data: {
            classes: classes,
            updateTime: db.serverDate()
          }
        });
        
        // 更新本地存储的用户信息
        userInfo.classes = classes;
        wx.setStorageSync('userInfo', userInfo);
      }
      
      // 操作成功提示
      wx.showToast({
        title: '添加班级成功',
        icon: 'success'
      });
      
      // 关闭模态框
      this.setData({
        showAddClassModal: false
      });
      
      // 重新加载班级列表
      this.loadClassList();
    } catch (error) {
      // 错误处理和提示
      console.error('添加班级失败', error);
      wx.showToast({
        title: '添加班级失败',
        icon: 'none'
      });
    }
  },

  // 添加新学生到数据库
  async addStudent() {
    // 验证必填字段
    if (!this.data.formData.name || !this.data.formData.studentId) {
      wx.showToast({
        title: '姓名和学号不能为空',
        icon: 'none'
      });
      return;
    }
    
    try {
      // 添加学生记录到数据库
      const db = wx.cloud.database();
      await db.collection('users').add({
        data: {
          ...this.data.formData, // 展开表单数据
          class: this.data.currentClass, // 关联到当前班级
          role: 'student', // 设置角色为学生
          createTime: db.serverDate(), // 创建时间
          updateTime: db.serverDate() // 更新时间
        }
      });
      // 操作成功提示
      wx.showToast({
        title: '添加成功',
        icon: 'success'
      });
      this.setData({ showAddModal: false });
      // 重新加载学生列表
      this.loadStudentList(this.data.currentClass);
    } catch (error) {
      // 错误处理和提示
      console.error('添加学生失败', error);
      wx.showToast({
        title: '添加失败',
        icon: 'none'
      });
    }
  },

  // 更新学生信息到数据库
  async editStudent() {
    // 验证必填字段
    if (!this.data.formData.name || !this.data.formData.studentId) {
      wx.showToast({
        title: '姓名和学号不能为空',
        icon: 'none'
      });
      return;
    }
    
    try {
      // 更新学生记录
      const db = wx.cloud.database();
      await db.collection('users').doc(this.data.currentEditStudent).update({
        data: {
          ...this.data.formData, // 展开表单数据
          updateTime: db.serverDate() // 更新时间
        }
      });
      // 操作成功提示
      wx.showToast({
        title: '修改成功',
        icon: 'success'
      });
      this.setData({ showEditModal: false });
      // 重新加载学生列表
      this.loadStudentList(this.data.currentClass);
    } catch (error) {
      // 错误处理和提示
      console.error('编辑学生失败', error);
      wx.showToast({
        title: '修改失败',
        icon: 'none'
      });
    }
  },

  // 删除学生
  deleteStudent(e) {
    const studentId = e.currentTarget.dataset.id;
    // 弹出确认对话框
    wx.showModal({
      title: '确认删除',
      content: '确定要删除这名学生吗？',
      success: async (res) => {
        if (res.confirm) {
          try {
            // 删除学生记录
            const db = wx.cloud.database();
            await db.collection('users').doc(studentId).remove();
            // 操作成功提示
            wx.showToast({
              title: '删除成功',
              icon: 'success'
            });
            // 重新加载学生列表
            this.loadStudentList(this.data.currentClass);
          } catch (error) {
            // 错误处理和提示
            console.error('删除学生失败', error);
            wx.showToast({
              title: '删除失败',
              icon: 'none'
            });
          }
        }
      }
    });
  },

  // 处理学生表单输入
  onInput(e) {
    const { field } = e.currentTarget.dataset;
    // 动态设置对应字段的值
    this.setData({
      [`formData.${field}`]: e.detail.value
    });
  },

  // 处理班级表单输入
  onClassInput(e) {
    const { field } = e.currentTarget.dataset;
    // 动态设置对应字段的值
    this.setData({
      [`classFormData.${field}`]: e.detail.value
    });
  }
}); 